package com.ftg.learn.mybatis.chapter2.dao;

import com.ftg.learn.mybatis.chapter2.entity.Sale;
import com.ftg.learn.mybatis.chapter2.entity.SaleFramer;
import com.ftg.learn.mybatis.chapter2.util.ResultBean;
import com.ftg.learn.mybatis.chapter2.util.SessionBase;
import com.ftg.learn.mybatis.chapter2.vo.SaleDetail;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.Map;

/**
 * 请求 响应式软件
 * request/response software
 * userAgent -  controller - service - dao -- mybatis-jdbc - mysql
 * 商品数据模型处理
 * 6大原则 (单一原则)
 *
 * @author kangjx
 * @date 2022/10/11
 */
public class SaleDao {

    private final SqlSession session = SessionBase.getSession();

    /**
     * 添加商品操作
     *
     * @param sale 商品实体
     * @return int
     */
    public int saveSale(Sale sale) {
        return session.insert("sale.insertSale", sale);
    }

    /**
     * 根据id查一操作
     *
     * @param id 主键
     * @return SaleFramer
     */
    public SaleFramer framerById(Integer id) {
        return session.selectOne("sale.framerById", id);
    }

    /**
     * 修改操作
     * @param sale  商品信息
     * @return int
     */
    public int modifySale(Sale sale) {
        return session.update("sale.modifySale", sale);
    }

    /**
     * 用来按照主键进行查询一条数据操作
     *
     * @param id 主键
     * @return int
     */
    public Sale findOneById(Integer id) {
        return session.selectOne("sale.findOneById", id);
    }

    /**
     * 逻辑删除
     * @param id 主键
     * @return int
     */
    public int deleteSale(Integer id) {
        return session.update("sale.delByidLogic", id);
    }

    /**
     * 商品明细
     * @param id 主键
     * @return List<SaleDetail>
     */
    public List<SaleDetail> showDetailById(Integer id) {
        return session.selectList("sale.saleDetail", id);
    }

    /**
     * 分页查询，用来查找当前页显示的哪几个真实数据的
     * @return List<SaleDetail>
     */
    public List<SaleDetail> page( ResultBean<SaleDetail> resultBean) {
        return session.selectList("sale.saleDataPage", resultBean);
    }

    /**
     * 分页查询，用来查找当前表里面共有多少条记录的
     * @return long
     */
    public long getConunt() {
        List<Map<String, Long>> tail = session.selectList("sale.saleDataPageCount");
        return tail.get(0).get("num");
    }

}
